package br.com.insight.consultoria.entity;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="INTERECE_ATUACAO")
public class IntereceAtuacao {
	
	@Embeddable
	public static class Id implements Serializable{
		
		@Transient
		private static final long serialVersionUID = 1L;

		@Column(name="ID_USUARIO")
		private Long usuarioId;
		@Column(name="ID_NIVEL_ATUACAO")
		private Long nivelAtuacaoId;
		@Column(name="ID_AREA_ATUACAO")
		private Long areaAtuacaoId;
		
		public Id() {}
		
		public Id(Long nivel,Long area,Long usuario){

			this.usuarioId=usuario;
			this.nivelAtuacaoId=nivel;
			this.areaAtuacaoId=area;
		}
		
		public Long getAreaAtuacaoId() {
			return areaAtuacaoId;
		}

		public Long getNivelAtuacaoId() {
			return nivelAtuacaoId;
		}

		public Long getUsuarioId() {
			return usuarioId;
		}

		@Override
		public boolean equals(Object o) {
			if(o!=null && o instanceof Id){
				Id id=(Id)o;
				return this.usuarioId.equals(id.usuarioId) 
						&& this.nivelAtuacaoId.equals(id.nivelAtuacaoId)
						&& this.areaAtuacaoId.equals(id.areaAtuacaoId);
			}else{
				return false;
			}
		}
		
		@Override
		public int hashCode() {
			return usuarioId.hashCode()+
			nivelAtuacaoId.hashCode()+
			areaAtuacaoId.hashCode();
		}
		
	}
	
	@EmbeddedId
	private Id id=new Id();
	
	@ManyToOne
	@JoinColumn(name="ID_USUARIO", insertable=false,updatable=false)
	private Usuario usuario;
	@ManyToOne
	@JoinColumn(name="ID_NIVEL_ATUACAO", insertable=false,updatable=false)
	private NivelAtuacao nivelAtuacao;
	@ManyToOne
	@JoinColumn(name="ID_AREA_ATUACAO", insertable=false,updatable=false)
	private AreaAtuacao areaAtuacao;
	
	public IntereceAtuacao() {}
	
	public IntereceAtuacao(Usuario usuario,NivelAtuacao nivelAtuacao,AreaAtuacao areaAtuacao) {
		
		this.usuario=usuario;
		this.nivelAtuacao=nivelAtuacao;
		this.areaAtuacao=areaAtuacao;
		
		this.id.nivelAtuacaoId=nivelAtuacao.getId();
		this.id.areaAtuacaoId=areaAtuacao.getId();
		this.id.usuarioId=usuario.getId();
	}

	public AreaAtuacao getAreaAtuacao() {
		return areaAtuacao;
	}

	public void setAreaAtuacao(AreaAtuacao areaAtuacao) {
		this.areaAtuacao = areaAtuacao;
	}

	public Id getId() {
		return id;
	}

	public void setId(Id id) {
		this.id = id;
	}

	public NivelAtuacao getNivelAtuacao() {
		return nivelAtuacao;
	}

	public void setNivelAtuacao(NivelAtuacao nivelAtuacao) {
		this.nivelAtuacao = nivelAtuacao;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
}
